<?php
// +----------------------------------------------------------------------+
// | The CompanyName 星座女神                                             |
// +----------------------------------------------------------------------+
// | Copyright (c) 2016, CompanyName 星座女神. All rights reserved.       |
// +----------------------------------------------------------------------+
// | Authors: CompanyName 星座女神.                                       |
// |                                                                      |
// +----------------------------------------------------------------------+
/**
 * @version  2.2
 * @author   guokunsheng
 * @date     2017-07-012
 */

namespace App\Http\Controllers\Api\v1\Astro;
use App\Http\Controllers\Api\v1\Astro\TotalscoreController;
use App\Http\Controllers\Controller;// 基础控制器
class PlanetpowerController extends Controller
{
    private $debug = false;
    private $base_data = [];
    private $high = 350;
    private $mid = 100;
    // 行星代表的方面
    private $planet_area = [
        '人格、个性、天赋、自我实现方式',
        '情绪、处事方式、家庭状态、安全感',
        '思考、交流、学习、出行',
        '交际、爱情、金钱价值',
        '个人意志、行动力、自我防卫',
        '幸运、异国缘分',
        '责任心、组织性',
        '独立性',
        '艺术感、梦想感',
        '深层意志'
    ];
    // 宫位代表的方面
    private $house_area = [
        1 => '身体健康',
        2 => '钱财',
        3 => '交流、出行',
        4 => '家庭',
        5 => '娱乐、恋爱、子女',
        6 => '工作、健康',
        7 => '婚姻、合作',
        8 => '健康、厄运',
        9 => '旅行、出国',
        10 => '事业、地位',
        11 => '团体、贵人',
        12 => '潜意识'
    ];
    // 活跃的星体表现的性格方面
    private $planet_active_area = [
        '积极、好表现。',
        '柔和、情绪化。',
        '聪明好学、爱思考。',
        '慵懒、爱享受、爱美。',
        '急躁、直爽，富有行动力甚至攻击性。',
        '乐观、浮夸。',
        '严谨、现实，有时悲观、自卑。',
        '独立、不喜被干涉。',
        '好幻想、爱做梦、喜欢艺术。',
        '深沉、偏执。',
    ];

    public function __construct($data = [], $debug = false)
    {
        if (empty($data)) if (empty($data)) return ['status' => '10001', 'Invalid Data!'];
        $this->base_data = $data;
        $this->debug = $debug;
    }

    public function _initload()
    {
        $active = $this->getPlanetActivePower();
        $power = $this->getPlanetPowerPower();
        $lucky = $this->getPlanetLuckyPower();
        $burn = $this->getPlanetBurnPower();
        $data = $this->getPlanetTags($active, $power, $lucky, $burn);


        return $data;
    }

    protected function getPlanetTags($active = [], $power = [], $lucky = [], $burn = [])
    {
        $ret = [];
        $planet_texts = [
            '它的光辉，铺满你的生命之路，终你一生，都在向它仰望追逐。',
            '回首每个温柔宁谧的瞬间，它总是轻轻拂上脸面，吻在心头。',
            '你打开这个世界，所见所闻所思所想，它化身万千无处不在。',
            '梳妆镜只能映出你的美丽，它却能兑现一个真实美丽的你。',
            '若心中没有火焰，野兽便肆意侵凌，请鼓起勇气直视敌人的眼睛。',
            '天高海阔，它带你奔向诗和远方，朝圣者拥有神赐的智慧与自由。',
            '想拥有丰饶的人生，就让它引领着你负重前行，穿越荒芜。',
            '不甘平庸的心，引领时代的花火闪耀，你最害怕的是墨守成规。',
            '最美好的都来自想象，它不必变作现实，只需让人相信。',
            '总有些东西要死亡，不然你只会一同腐朽，割裂痛苦，便是新生。'
        ];
        for ($i = 0; $i < 10; $i++)
        {
            $data = ($active[$i] + $power[$i] - $burn[$i]) / 2;
            if ($data < 1)
            {
                $name = '极度虚弱';
                $lv = 0;
            } elseif ($data < 50)
            {
                $name = '弱不禁风';
                $lv = 1;
            } elseif ($data < 150)
            {
                $name = '初具气力';
                $lv = 2;
            } elseif ($data < 250)
            {
                $name = '气力雄壮';
                $lv = 3;
            } elseif ($data < 350)
            {
                $name = '雄霸一方';
                $lv = 4;
            } else
            {
                $name = '超级行星';
                $lv = 5;
            }

            // 高 3  中 2  低 1
            if ($active[$i] > $this->high)
            {
                $active_status = 3;
            } elseif ($active[$i] > $this->mid)
            {
                $active_status = 2;
            } else
            {
                $active_status = 1;
            }

            if ($lucky[$i] > $this->high)
            {
                $lucky_status = 3;
            } elseif ($lucky[$i] > $this->mid)
            {
                $lucky_status = 2;
            } else
            {
                $lucky_status = 1;
            }

            if ($power[$i] > $this->high)
            {
                $power_status = 3;
            } elseif ($power[$i] > $this->mid)
            {
                $power_status = 2;
            } else
            {
                $power_status = 1;
            }

            if ($burn[$i] > $this->high)
            {
                $burn_status = 3;
            } elseif ($burn[$i] > $this->mid)
            {
                $burn_status = 2;
            } else
            {
                $burn_status = 1;
            }
            $status = $power_status . $lucky_status . $active_status;// 333

            $power_text = $this->getThePowerText($status, $burn[$i]);

            // 1、	若这颗星只有一个相位，且成相星体吉利高于350：
            $phase_num = 0;
            $phase_smvmm_num = 0;
            if (!empty($this->base_data['planets'][$i]['phase']))
            {
                foreach ($this->base_data['planets'][$i]['phase'] as $phase)
                {
                    if ($phase['id'] > 9) continue;
                    elseif (in_array($phase['id'], [0, 1, 2, 3, 4])) $phase_smvmm_num++;
                    $phase_num++;
                }
            }
            if ($phase_num == 1 && $lucky[$i] > 350)
            {
                $power_text = "这颗星可能代表着不同一般的好运和眷顾，在它主导的某些方面你会收获颇丰。";
            } elseif ($phase_num >= 4)
            {
                if ($this->is_zhigao($i))
                {
                    $power_text = "这颗星是整张星盘的核心之一，很可能是最重要的核心。它的能量会对你的人生产生深远的影响，请一定要注意它的能量属性。";
                }
                if ($phase_smvmm_num >= 3)
                {
                    $power_text = "这可能是你最核心的星体之一，深刻影响着你人生的运作，很大程度决定你的成功失败。请一定要注意它的能量属性。";
                }
            }
            // 2、	若这颗星位于T三角顶点：
            if (!empty($this->base_data['structure']['t_square']))
            {
                foreach ($this->base_data['structure']['t_square'] as $t_square)
                {
                    if ($t_square[2]['id'] == $i)
                    {
                        $power_text .= "这颗星面临着巨大的挑战，它所代表的某些事务，很可能让你深陷漩涡，努力争取却得不到，只有付出千辛万苦才能修成正果。";
                    }
                }
            }
            if ($lv == 4)
            {
                $power_text = "恭喜你，拥有一颗健康有力的大吉星！这说明你是命运的宠儿，有着极大的潜力，有机会取得令人欣羡仰望的辉煌！";
            } elseif ($lv == 5)
            {
                $power_text = "天哪！一颗极其罕见的超级行星出现在你的星图上！你很可能是万中无一的幸运儿，前路辉煌无比，人生快乐如意，倾尽情地挥霍吧！";
            } elseif ($lv == 3)
            {
                if ($burn[$i] < 80)
                {
                    $power_text = '这是一颗比较健康，且相对有力的行星，你会在它主导的事务中表现良好，也可能借此获得一定的成功。';
                }
                if ($lucky[$i] > 400 && $active[$i] < 200)
                {
                    $power_text = "作为一颗非常吉利的行星，它需要更广阔的活跃空间来增加影响，它的能量有一点被浪费，但仍会带来不少的好处";
                } elseif ($lucky[$i] > 300 && $active[$i] < 200)
                {
                    $power_text = "作为一颗比较吉利的行星，它需要更广阔的活跃空间来增加影响，它的能量有一点被浪费，但仍会带来一定的好处。";
                } elseif ($lucky[$i] < 100 && $active[$i] > 300)
                {
                    $power_text = "这颗星的能量需要警惕，它明显是弊大于利，可能已经对你的生活造成很多不良的影响。你最好认清它的能量模式并对它加以疏导。";
                } elseif ($lucky[$i] > 300 && $active[$i] > 300)
                {
                    $power_text = "这是一颗足够给力的吉星，虽然发挥不太稳定，但也能给你奠定比较幸运的人生。";
                }
                if ($power[$i] > 400)
                {
                    $power_text = "这颗星主导的事务可能会是你人生的突破点，你会在其中获得好运或有良好的表现。";
                }
            }

            $is_most_active = $is_most_lucky = false;
            if ($active[$i] == max($active)) $is_most_active = true;
            if ($lucky[$i] == max($lucky)) $is_most_lucky = true;

            $ret[] = [
                'id' => $i,
                'lv' => $lv,
                'name' => $name,
                'active' => $active[$i],
                'stabilize' => $power[$i],
                'lucky' => $lucky[$i],
                'burn' => $burn[$i],
                'active_status' => $active_status,
                'lucky_status' => $lucky_status,
                'stabilize_status' => $power_status,
                'burn_status' => $burn_status,
                'description' => $planet_texts[$i],
                'power_text' => $power_text,
                'planet_text' => $this->getThePlanetText($i, $active[$i], $power[$i], $lucky[$i], $burn[$i], $is_most_active, $is_most_lucky),
            ];
        }
        return $ret;
    }

    /**
     * @param string $str '333'即高高高 '222'中中中 '111'低低低
     * @param int $burn 损伤值 0-500
     * @return string
     */
    private function getThePowerText($str = '111', $burn = 0)
    {
        $data = [
            '333' => [1, '星盘上有这样的一颗星，你的人生不是被幸运填满，就是具备无限辉煌的可能，'],
            '332' => [1, '一颗非常吉利的行星，会给你的人生带来幸运，'],
            '331' => [1, '一颗非常吉利的行星，虽然处于比较怠惰的状态，但仍会给你带来某些方面的好运气，'],
            '323' => [1, '比较吉利而且活跃，它会给你奠定一个相当不错的人生基调，'],
            '322' => [1, '比较吉利的一颗星，它对你人生的影响也比较狭窄，但仍会赋予你机会和希望，'],
            '321' => [1, '比较吉利的一颗星，只是它对星盘的影响较低，'],
            '313' => [0, '这颗天性不良的行星主导了你的星盘，因为它的稳定性，可以帮你创造一些成就，但你必须警惕它潜在的破坏能力，'],
            '312' => [0, '一个不太想做坏事的坏人，也能对你有一定帮助，但它的坏脾气不容忽视，'],
            '311' => [1, '它可以看作是个不想作恶的坏人，而且身体虚弱，你不用太在乎它的破坏力，拥有这种状态的行星其实是一件好事，'],
            '233' => [1, '这颗星会赐予你极大的好处，尽管发挥不够稳定，但足以让你受用终生，'],
            '232' => [1, '尽管不太活跃也不太稳定，但它仍会带给你极大的帮助，'],
            '231' => [0, '它是一颗非常吉利却放错了位置的行星，能给你带来的好处十分有限，'],
            '223' => [1, '它有着十足强悍的影响，并会给你带来一些好处，可以说相当不错，'],
            '222' => [1, '它会给你带来一些好处，也有着较强的影响力，'],
            '221' => [1, '它的影响力较小，但在某些方面仍会带给你不错的收益，'],
            '213' => [0, '这颗星有很强的破坏力，也许它已经给你造成了一些困扰，最好想办法加以克制，'],
            '212' => [0, '它的破坏力不容忽视，最好想办法加以克制，'],
            '211' => [1, '虽然天性不良，但它能造成的破坏十分有限，'],
            '133' => [1, '它是命运赐给你的护身符，拥有它，你将会拥有一个波澜壮阔的人生，'],
            '132' => [1, '它是命运赐给你的护身符，在带给你好处之前，往往会先招来厄运的觊觎，'],
            '131' => [1, '一颗偷懒的吉星，你需要提升它的能量，'],
            '123' => [0, '吉凶参半，但它带给你的坏处比好处更多，你需要抑制它的能量，'],
            '122' => [0, '吉凶参半，但它带给你的坏处比好处更多，你最好对它加以抑制，'],
            '121' => [0, '吉凶都不明显，也没有太大力量，'],
            '113' => [0, '这颗星可能会给你制造狂风暴雨般的人生，如不加以抑制，它会破坏你人生的方方面面，'],
            '112' => [0, '这颗星可能会给你制造狂风暴雨般的人生，如不加以抑制，它会破坏你人生的很多方面，'],
            '111' => [0, '这是一颗没什么力量作恶的凶星，虽然需要警惕，但不用过于担心，'],
        ];
        if ($burn == 0)
        {
            $burn_text = [1, '它毫发无伤，所象征的方面可以得到极好的发挥。'];
        } elseif ($burn > 0 && $burn <= 100)
        {
            $burn_text = [1, '它基本没受什么损伤，处于十分稳定的状态。'];
        } elseif ($burn > 100 && $burn <= 200)
        {
            $burn_text = [0, '它遭受了一些损伤，会对它的发挥带来影响。'];
        } elseif ($burn > 200 && $burn <= 350)
        {
            $burn_text = [0, '它损伤严重，会极大影响到它主导的方面。'];
        } else
        {
            $burn_text = [0, '它受到了毁灭性的伤害，所主导的事情可能会给你带来非常不好的体验'];
        }


        if (($data[$str][0] === 0 && $burn_text[0] !== 0) || ($data[$str][0] !== 0 && $burn_text[0] === 0))
        {
            $link = '不过';
        } else
        {
            $link = '并且';
        }
        $ret_str = $data[$str][1] . $link . $burn_text[1];

        return $ret_str;
    }

    /**
     * 获取该行星提示语
     * @param null $id 行星id
     * @param int $active 行星活跃值
     * @param int $power 行星力量值
     * @param int $lucky 行星吉利值
     * @param int $burn 行星损伤值
     * @param bool $is_most_active 是否为活跃最高的星体
     * @param bool $is_most_luck 是否为吉利最高的星体
     */
    protected function getTheplanetText($id = null, $active = 0, $power = 0, $lucky = 0, $burn = 0, $is_most_active = false, $is_most_luck = false)
    {
        $text_leading = '它代表';

        $planet_attr = $this->planet_area[$id];
        $represent_str = $planet_attr;

        $house_attr = '';
        for ($i = 1; $i < 13; $i++)
        {
            if ($this->base_data['houses'][$i]['protect_id'] == $id)
            {
                $house_attr .= '、' . $this->house_area[$i];
            }
            if ($this->base_data['houses'][$i]['protect_id'] != $this->base_data['houses'][$i]['protect_ancient_id']
                && $this->base_data['houses'][$i]['protect_ancient_id'] == $id)
            {
                $house_attr .= '、' . $this->house_area[$i];
            }
        }

        if ($house_attr != '') $represent_str .= $house_attr;

        $represent_str .= '。';

        $leading_array = explode('、', $represent_str);

        $represent_str = implode('、', array_unique($leading_array));

        $text_leading .= $represent_str;

        $text_content = '';
        $active_str = '';
        $planets_name = explode('|', config('astrolog.planets_name')[$id])[3];
        if ($is_most_active)
        {
            $active_str .= '你的' . $planets_name . '是你的星盘上最活跃的星体，它拥有最为强大的影响力，这会让你的性格变得';
        } else
        {
            if ($active > 280)
            {
                $active_str .= '你的' . $planets_name . '非常活跃，它强大的影响力会让你';
            } elseif ($active > 200)
            {
                $active_str .= '你拥有一颗相当活跃的' . $planets_name . '，它可能会让你';
            }
        }
        if ($active_str != '')
        {
            $active_str .= $this->planet_active_area[$id];
        }
        $text_content .= $active_str;

        $lucky_str = '';
        if ($is_most_luck)
        {
            $lucky_str .= '它是你星盘上最为吉利的星体，';
        } else
        {
            if ($lucky > 280)
            {
                $lucky_str .= '它是一颗非常吉利的星体，';
            } elseif ($lucky > 200)
            {
                $lucky_str .= '这颗星比较吉利，';
            }
        }
        if ($lucky_str != '')
        {
            if ($active > 280)
            {
                $lucky_str .= '并且，由于它极具影响力，能很好地发挥它的吉利属性，这会令你幸运异常，容易取得令人羡慕的成就。';
            } elseif ($active > 200)
            {
                $lucky_str .= '并且，由于它影响力很强大，吉利属性得以较好地发挥，会给你带来不同一般的好处。';
            } elseif ($active > 100)
            {
                $lucky_str .= '只是它相对不太活跃，影响力有所欠缺，吉利属性的发挥不够充分，可能无法带来太大的好处。';
            } else
            {
                $lucky_str .= '可惜它很不活跃，影响力较为低下，吉利属性无法得到充分发挥，所以你能得到的好处十分有限。';
            }
        }
        $text_content .= $lucky_str;

        $burn_str = '';
        if (in_array($id, [0, 1, 2, 3, 4]))
        {
            $attr = $planet_attr;
        } else
        {
            if ($house_attr) $attr = mb_substr($house_attr, 1);

            else $attr = '';
        }
        if ($active_str != '' || $lucky_str != '')
        {
            if ($burn > 200)
            {
                $burn_str .= '只是它遭受了非常严重的损伤，因此在它代表的' . $attr . '等方面，你可能会面对较为严峻的挑战，受到一些困扰甚至遭遇一些失败。';
            } elseif ($burn > 120)
            {
                $burn_str .= '只是它遭受了一些损伤，因此在它代表的' . $attr . '等方面，你会面对一些挑战。';
            } elseif ($burn > 50)
            {
                $burn_str .= '它多少遭受了一点损伤，这会导致在它代表的' . $attr . '等方面，你会面对一点点的困扰，但一般不会造成太大问题。';
            } else
            {
                $burn_str .= '它几乎没受损伤，所以在' . $attr . '等方面你不会受到太大的挑战，这对你来说非常不错，一颗健康的星体可以让你的生活减少许多困难折磨。';
            }
        } else
        {
            if ($burn > 200)
            {
                $burn_str .= '这颗星损伤严重，因此在它代表的' . $attr . '等方面，你可能会面对较为严峻的挑战，受到一些困扰甚至遭遇一些失败。';
            } elseif ($burn > 120)
            {
                $burn_str .= '这颗星遭受了一些损伤，因此在它代表的' . $attr . '等方面，你会面对一些挑战。';
            } elseif ($burn > 120)
            {
                $burn_str .= '这颗星多少遭受了一点损伤，这会导致在它代表的' . $attr . '等方面，你会面对一点点的困扰，但一般不会造成太大问题。';
            } else
            {
                $burn_str .= '这颗星几乎没受损伤，所以在' . $attr . '等方面你不会受到太大的挑战，这对你来说非常不错，一颗健康的星体可以让你的生活减少许多困难折磨。';
            }
        }
        $text_content .= $burn_str;

        $planet_des = [
            '太阳是太阳系的绝对核心，也是星盘的核心，它是光明之本，是生命力的源泉，带来的是一种阳性的蓬勃向上的能量，领导，创造，展示，自信自尊，鼓舞人心。是它让你成为你自己，并引人注目，获得认可。',
            '月亮是情绪的主宰，母性的代表星，它是一种温暖、柔和又敏感的能量，家，房子，父母亲情，保护与被保护，阴晴圆缺，喜怒哀乐。它是连接你和家人的情感纽带，也令你可以体察人生环境，丰富感受，觉知需求。',
            '水星是轻快、跳跃的能量，象征往返、连通，代表人与人的交流、信息交换、思考和表达，也代表道路、交通和短线旅行。它带来学习、理解、收集和处理信息的能力。',
            '金星是和谐、美好的能量，象征少女的、美丽的、有价值的，既代表艺术、金钱等令人愉悦、得益的事物，也代表恋爱、合作等令人愉悦的人际关系。它是一切真实而美好的人、事、物，取悦他人，快乐自己，舒适人生。',
            '火星是昂扬、激烈的阳性能量，代表勇气、胆量、竞争、战斗、行动、积极争取，以及性。 它帮助人迅速采取行动，自强自立，与环境对抗，保护自己，并攫取自己的生存资本。',
            '木星是一种代表提升、扩张的能量。它让人看到可成长的未来和生命的意义，获得学识、智慧、信仰以及乐观、自信的人生态度，从心理和空间的广度来拓展人生，而拥有拓展的可能则意味着幸运、机遇和财富。它也有助于旅行、出国。',
            '土星是一种代表收缩、限制的能量。它给人生设立疆界，制造障碍和困难，令人感受到自卑、孱弱和恐惧，同时也令人看清责任和现实，不再浮躁地幻想和天马行空，而采取脚踏实地地努力和坚持，在忍耐中接受时间的检验。',
            '天王星无视规则，我行我素，保持独立，制造变革。它是一种自由超脱的能量，有着极强的跳跃性和突然性，并往往因不循常轨而带来震撼。它是科技和思想革新的主力，借由闪耀的灵感和另辟蹊径的思考引领时代变革，但有时过于激进和自我。',
            '海王星代表梦幻与精神之美。美发展至极致便只能脱离真实并捉摸不定，只存在于想象和影视等艺术之中，但它有欺骗和令人迷醉的力量。制造虚幻，美化现实，看不清并拒绝接受真实的现实，当现实来临时便自我麻醉和逃避。',
            '冥王星代表黑暗、隐秘、禁忌、暴力和潜藏的力量。它也象征着危机、死亡和重生。揭示秘密，直面威胁，清剿毒瘤，会令我们经历危机甚至某种意义上的死亡。它带给我们强大的意志和掌控力，而跨越深沉的痛苦，方能重获新生。',
        ];

        return ['des' => $planet_des[$id], 'leading_prefix' => $text_leading, 'leading' => $text_content];
    }

    /**
     * 获取该行星提示语
     * @param null $id
     * @param int $active
     * @param int $power
     * @param int $lucky
     * @param int $burn
     * @return array
     */
    protected function getTheplanetText_old($id = null, $active = 0, $power = 0, $lucky = 0, $burn = 0)
    {
        $prefix = "如果你想让以下方面变得更好，请务必对它的能量进行";
        $pre_tag = [];
        if ($burn > 200)
        {
            $pre_tag[] = "修补";
        }
        if (($lucky > 250 || $id == 3 || $id == 5) && $active < 350)
        {
            $pre_tag[] = "提升";
        }
        if (
            ($lucky < 150 && $active < 200)
            || ($lucky < 250 && in_array($id, [4, 6, 7, 8, 9]) && (
                    (isset($this->base_data['planets'][$id]['phase'][$id . '-0']) && in_array($this->base_data['planets'][$id]['phase'][$id . '-0']['phase_e'], [90, 180]))
                    || (isset($this->base_data['planets'][$id]['phase'][$id . '-1']) && in_array($this->base_data['planets'][$id]['phase'][$id . '-1']['phase_e'], [90, 180]))
                    || (isset($this->base_data['planets'][$id]['phase'][$id . '-2']) && in_array($this->base_data['planets'][$id]['phase'][$id . '-2']['phase_e'], [90, 180]))
                    || (isset($this->base_data['planets'][$id]['phase'][$id . '-3']) && in_array($this->base_data['planets'][$id]['phase'][$id . '-3']['phase_e'], [90, 180]))
                    || (isset($this->base_data['planets'][$id]['phase'][$id . '-4']) && in_array($this->base_data['planets'][$id]['phase'][$id . '-4']['phase_e'], [90, 180]))
                ))

        )
        {
            $pre_tag[] = "疏导";
        }
        if ($power < 200)
        {
            $pre_tag[] = "加强";
        }
        if (count($pre_tag) == 0)
        {
            $prefix = "这颗星的能量状态暂时不需要干涉，它影响的是以下几个方面：";
        } elseif (count($pre_tag) == 1)
        {
            $prefix .= $pre_tag[0];
        } elseif (count($pre_tag) == 2)
        {
            $prefix .= $pre_tag[0] . "和" . $pre_tag[1];
        } elseif (count($pre_tag) == 3)
        {
            $prefix .= $pre_tag[0] . "、" . $pre_tag[1] . "和" . $pre_tag[2];
        }

        $planet_des = [
            '太阳是太阳系的绝对核心，也是星盘的核心，它是光明之本，是生命力的源泉，带来的是一种阳性的蓬勃向上的能量，领导，创造，展示，自信自尊，鼓舞人心。是它让你成为你自己，并引人注目，获得认可。',
            '月亮是情绪的主宰，母性的代表星，它是一种温暖、柔和又敏感的能量，家，房子，父母亲情，保护与被保护，阴晴圆缺，喜怒哀乐。它是连接你和家人的情感纽带，也令你可以体察人生环境，丰富感受，觉知需求。',
            '水星是轻快、跳跃的能量，象征往返、连通，代表人与人的交流、信息交换、思考和表达，也代表道路、交通和短线旅行。它带来学习、理解、收集和处理信息的能力。',
            '金星是和谐、美好的能量，象征少女的、美丽的、有价值的，既代表艺术、金钱等令人愉悦、得益的事物，也代表恋爱、合作等令人愉悦的人际关系。它是一切真实而美好的人、事、物，取悦他人，快乐自己，舒适人生。',
            '火星是昂扬、激烈的阳性能量，代表勇气、胆量、竞争、战斗、行动、积极争取，以及性。 它帮助人迅速采取行动，自强自立，与环境对抗，保护自己，并攫取自己的生存资本。',
            '木星是一种代表提升、扩张的能量。它让人看到可成长的未来和生命的意义，获得学识、智慧、信仰以及乐观、自信的人生态度，从心理和空间的广度来拓展人生，而拥有拓展的可能则意味着幸运、机遇和财富。它也有助于旅行、出国。',
            '土星是一种代表收缩、限制的能量。它给人生设立疆界，制造障碍和困难，令人感受到自卑、孱弱和恐惧，同时也令人看清责任和现实，不再浮躁地幻想和天马行空，而采取脚踏实地地努力和坚持，在忍耐中接受时间的检验。',
            '天王星无视规则，我行我素，保持独立，制造变革。它是一种自由超脱的能量，有着极强的跳跃性和突然性，并往往因不循常轨而带来震撼。它是科技和思想革新的主力，借由闪耀的灵感和另辟蹊径的思考引领时代变革，但有时过于激进和自我。',
            '海王星代表梦幻与精神之美。美发展至极致便只能脱离真实并捉摸不定，只存在于想象和影视等艺术之中，但它有欺骗和令人迷醉的力量。制造虚幻，美化现实，看不清并拒绝接受真实的现实，当现实来临时便自我麻醉和逃避。',
            '冥王星代表黑暗、隐秘、禁忌、暴力和潜藏的力量。它也象征着危机、死亡和重生。揭示秘密，直面威胁，清剿毒瘤，会令我们经历危机甚至某种意义上的死亡。它带给我们强大的意志和掌控力，而跨越深沉的痛苦，方能重获新生。',
        ];
        $planet_inhouse_des = [
            1 => '健康、外貌气质、性格、',
            2 => '财富、价值观、消费方式、',
            3 => '学业、思考分析、交流表达、兄弟姐妹、出行、',
            4 => '家庭、房产、父亲、',
            5 => '恋爱、子女、娱乐、投资、性爱、自我表现、创造力、',
            6 => '日常工作、健康、宠物豢养、',
            7 => '婚恋、合作、人际关系、',
            8 => '财运、投资、厄运、生死、玄学缘分、',
            9 => '旅游、迁移、教育、信仰、出国、',
            10 => '事业、名声、',
            11 => '朋友、团体、贵人、',
            12 => '内心成长、玄学缘分、',
        ];
        $planet_area = [
            0 => '性格、健康、',
            1 => '健康、家庭关系、母亲、房产、情感关怀、',
            2 => '学业、思考分析、交流表达、兄弟姐妹、出行、',
            3 => '婚恋、人际关系、财运、个人享受、',
            4 => '婚恋、性爱、抗压能力、竞争力、执行力、',
        ];
        $planet_inhouse = $this->base_data['planets'][$id]['in_house_id'];
        $leading = '';
        for ($i = 1; $i < 13; $i++)
        {
            if ($this->base_data['houses'][$i]['protect_id'] == $id)
            {
                $leading .= $planet_inhouse_des[$i];
            }
            if ($this->base_data['houses'][$i]['protect_id'] != $this->base_data['houses'][$i]['protect_ancient_id']
                && $this->base_data['houses'][$i]['protect_ancient_id'] == $id)
            {
                $leading .= $planet_inhouse_des[$i];
            }
        }

        if (isset($planet_area[$id]))
        {
            $leading .= $planet_area[$id];
        }

        $leading .= $planet_inhouse_des[$planet_inhouse];

        $leading_array = explode('、', $leading);

        $leading = implode('、', array_unique($leading_array));
        $leading = mb_substr($leading, 0, mb_strlen($leading, 'utf8') - 1, 'utf-8');// rtrim 有的中文会出现乱码、
        return ['des' => $planet_des[$id], 'leading_prefix' => $prefix, 'leading' => $leading];
    }

    /**
     * 获取行星活跃度
     * @return array
     */
    protected function getPlanetActivePower()
    {
        $sun_pa = $this->base_data['planets'][0]['ancient']['or_walls_planet_id'];
        $moon_pa = $this->base_data['planets'][1]['ancient']['or_walls_planet_id'];
        $sun_p = config('astrolog.protect_id')[$this->base_data['planets'][0]['in_sign_id'] - 1];// 计算现占守护星
        $moon_p = config('astrolog.protect_id')[$this->base_data['planets'][1]['in_sign_id'] - 1];// 计算现占守护星
        $house1_protect = $this->base_data['houses'][1]['protect_id'];
        $house1_protect_ancient = $this->base_data['houses'][1]['protect_ancient_id'];
        $house10_protect = $this->base_data['houses'][10]['protect_id'];
        $house10_protect_ancient = $this->base_data['houses'][10]['protect_ancient_id'];
        $power = [];// 行星能量
        $ascDeg = $this->base_data['planets'][ASC]['deg'];// 上升点黄道度数
        $mcDeg = $this->base_data['planets'][MC]['deg'];// 天顶黄道度数
        $icDeg = ($mcDeg > 180) ? $mcDeg - 180 : $mcDeg + 180;// 天底黄道度数
        $desDeg = ($ascDeg > 180) ? $ascDeg - 180 : $ascDeg + 180;// 下降黄道度数
        $diffFromMC = 360;
        $topFloorNum = 0;
        $diff_i = null;
        $inHouse8_11Num = 0;
        $isTopFloor = false;
        $num = [];
        // 实例化  用于求行星影响度
        $Totalscore = new TotalscoreController($this->base_data);
        $influ = [];
        for ($k = 0; $k < 10; $k++)
        {
            $influ[$k] = $Totalscore->about_planet($k)['relevancy'];
        }

        for ($i = 0; $i < 10; $i++)
        {
            $power[$i] = 0;
            $p = $this->base_data['planets'][$i];
            $IsPlanetPseudaxis = $this->IsPlanetPseudaxis($p, $ascDeg, $icDeg, $desDeg, $mcDeg, 5);
            if ($IsPlanetPseudaxis[0] === true)
            {
                if ($IsPlanetPseudaxis[1] == 0)
                {
                    if ($IsPlanetPseudaxis[2] == 'asc' || $IsPlanetPseudaxis[2] == 'mc')
                    {
                        $power[$i] += 160;
                    }
                    if ($IsPlanetPseudaxis[2] == 'ic' || $IsPlanetPseudaxis[2] == 'des')
                    {
                        $power[$i] += 100;
                    }
                } elseif ($IsPlanetPseudaxis[1] == 120)
                {
                    if ($IsPlanetPseudaxis[2] == 'asc' || $IsPlanetPseudaxis[2] == 'mc')
                    {
                        $power[$i] += 50;
                    }
                    if ($IsPlanetPseudaxis[2] == 'ic' || $IsPlanetPseudaxis[2] == 'des')
                    {
                        $power[$i] += 30;
                    }
                } elseif ($IsPlanetPseudaxis[1] == 90)
                {
                    if ($IsPlanetPseudaxis[2] == 'asc' || $IsPlanetPseudaxis[2] == 'mc')
                    {
                        $power[$i] += 50;
                    }
                }
            } else
            {
                if (in_array($p['in_house_id'], [1, 4, 7, 10])) $power[$i] += 58;
                if (in_array($p['in_house_id'], [2, 5, 8, 11])) $power[$i] += 48;
                if (in_array($p['in_house_id'], [3, 6, 9])) $power[$i] += 38;
                if (in_array($p['in_house_id'], [12])) $power[$i] += 20;
            }
            // 检测星体是否最高
            $pDeg = $p['deg'];
            $diff = abs($pDeg - $mcDeg);
            if ($diff > 180) $diff = 360 - $diff;
            if ($diff < $diffFromMC)
            {
                $diffFromMC = $diff;
                $diff_i = $i;
                if ($p['in_house_id'] > 6) $isTopFloor = true;
            }
            // 地平线上行星数量
            if ($p['in_house_id'] > 6) $topFloorNum++;
            if (in_array($p['in_house_id'], [8, 9, 10, 11])) $inHouse8_11Num++;
            // 检测是否喜乐
            if ($i == 0 && $p['in_house_id'] == 9) $power[$i] += 20;
            elseif ($i == 1 && $p['in_house_id'] == 3) $power[$i] += 20;
            elseif ($i == 2 && $p['in_house_id'] == 1) $power[$i] += 20;
            elseif ($i == 3 && $p['in_house_id'] == 5) $power[$i] += 20;
            elseif ($i == 4 && $p['in_house_id'] == 6) $power[$i] += 20;
            elseif ($i == 5 && $p['in_house_id'] == 11) $power[$i] += 20;
            elseif ($i == 6 && $p['in_house_id'] == 12) $power[$i] += 20;


            $base = 1;
            foreach ($influ[$i] as $l => $flu)
            {
                if ($l == 0) $base = 60;
                elseif ($l == 1) $base = 60;
                elseif ($l == 2) $base = 40;
                elseif ($l == 3) $base = 40;
                elseif ($l == 4) $base = 40;
                elseif ($l == 5) $base = 20;
                elseif ($l == 6) $base = 15;
                elseif ($l == 7) $base = 10;
                elseif ($l == 8) $base = 10;
                elseif ($l == 9) $base = 10;
                if ($this->base_data['houses'][1]['protect_id'] == $l
                    || $this->base_data['houses'][1]['protect_ancient_id'] == $l)
                {
                    $base += 30;
                }
                if (
                    (isset($this->base_data['planets'][$l]['phase'][$l . '-' . ASC])
                        && $this->base_data['planets'][$l]['phase'][$l . '-' . ASC]['phase_e'] == 0)
                    || (isset($this->base_data['planets'][$l]['phase'][$l . '-' . MC])
                        && $this->base_data['planets'][$l]['phase'][$l . '-' . MC]['phase_e'] == 0)
                )
                {
                    $base += 30;
                }
                if (
                    (isset($this->base_data['planets'][$l]['phase'][$l . '-' . IC])
                        && $this->base_data['planets'][$l]['phase'][$l . '-' . IC]['phase_e'] == 0)
                    || (isset($this->base_data['planets'][$l]['phase'][$l . '-' . DES])
                        && $this->base_data['planets'][$l]['phase'][$l . '-' . DES]['phase_e'] == 0)
                )
                {
                    $base += 20;
                }
                if ($diff_i == $l && (!isset($this->base_data['planets'][$l]['phase'][$l . '-' . MC])
                        || $this->base_data['planets'][$l]['phase'][$l . '-' . MC]['phase_e'] != 0))
                {
                    $base += 20;
                }


                $power[$i] += $base * $flu;

            }
            // 若该星处于忙碌状态，且该星活跃低于300，则活跃+60
            if (!empty($p['phase']))
            {
                $num[$i] = 0;
                foreach ($p['phase'] as $phase)
                {
                    if ($phase['id'] < 10) $num[$i]++;
                }

                if ($num[$i] == 0) $power[$i] += 120;// 若行星空相，则该星+120
            }
            // 八、若该星为命主星（古+现），【+50】。若此时它还定位日月，日月中每多定位一颗则【+30】；若此时它与10宫主（古+现）成相【+50】
            if ($i == $house1_protect_ancient || $i == $house1_protect)
            {
                $power[$i] += 50;
                if ($i == $sun_pa || $i == $sun_p)
                {
                    $power[$i] += 30;
                }
                if ($i == $moon_pa || $i == $moon_p)
                {
                    $power[$i] += 30;
                }
                if (isset($p['phase'][$i . '-' . $house10_protect]) || isset($p['phase'][$i . '-' . $house10_protect_ancient]))
                {
                    $power[$i] += 50;
                }

            }
        }
        if ($isTopFloor && $diff_i !== null)
        {
            $power[$diff_i] += 50;
            if ($topFloorNum == 1 || $inHouse8_11Num == 1) $power[$diff_i] += 30;
        }
        for ($j = 0; $j < 10; $j++)
        {
            if (isset($num[$j]) && $num[$j] >= 4 && $power[$j] < 300) $power[$j] += 60;
            $power[$j] = $power[$j] > 500 ? 500 : ($power[$j] < 0 ? 0 : round($power[$j]));
        }
        return $power;
    }

    /**
     * 获取行星第二项    力量
     * 力量是表达星体本身素质，以及所得吉力的重要属性，
     * 包括几个方面：
     * 黄道状态、顺逆状态、触及金木、触及日月，触及吉利恒星、落吉宫
     */
    protected function getPlanetPowerPower()
    {
        // 各行星力量基数为150
        $po = [150, 150, 150, 150, 150, 150, 150, 150, 150, 150,];

        $Totalscore = new TotalscoreController($this->base_data);

        for ($i = 0; $i < 10; $i++)
        {
            $p = $this->base_data['planets'][$i];
            if ($i < 7)
            {
                if ($p['ancient']['walls'] == 1)
                {
                    $po[$i] += 20;
                } elseif ($p['ancient']['promote'] == 1)
                {
                    $po[$i] += 15;
                } elseif ($p['ancient']['trisection'] == 1)
                {
                    $po[$i] += 10;
                } elseif ($p['ancient']['extent'] == 1)
                {
                    $po[$i] += 10;
                } elseif ($p['ancient']['period'] == 1)
                {
                    $po[$i] += 5;
                } elseif ($p['ancient']['walls'] == 2)
                {
                    $po[$i] -= 20;
                } elseif ($p['ancient']['promote'] == 2)
                {
                    $po[$i] -= 20;
                } elseif ($p['ancient']['migration'] == 1 && $i > 1)
                {
                    $po[$i] -= 10;
                }
            }

            if ($p['speed'] < 0) $po[$i] -= 40;

            $influ_for_sun = $Totalscore->about_planet(0)['relevancy'];
            $influ_for_moon = $Totalscore->about_planet(1)['relevancy'];
            $influ_for_venu = $Totalscore->about_planet(3)['relevancy'];
            $influ_for_jupi = $Totalscore->about_planet(5)['relevancy'];

            $ev = isset($influ_for_venu[$i]) ? $influ_for_venu[$i] : 0;
            $ej = isset($influ_for_jupi[$i]) ? $influ_for_jupi[$i] : 0;
//            $aaa = ($ev * 80 + $ej * 100);
//            echo "{$i}+金木影响值:{($ev * 80 + $ej * 100)} = $aaa\n";
            $po[$i] += ($ev * 80 + $ej * 100);

            $es = isset($influ_for_sun[$i]) ? $influ_for_sun[$i] : 0;
            $em = isset($influ_for_moon[$i]) ? $influ_for_moon[$i] : 0;
            // 若月亮与该星四分，em=0，若月亮与该星对分，em=em*0.3
            // 日生盘，日月的影响=es*100+em*40，
            // 夜生盘，日月的影响=es*70+em*70
            // +日月影响值
            // 若此时，金木影响值与日月影响值都不为零，额外+40
            if (isset($p['phase'][$i . '-1']))
            {
                if ($p['phase'][$i . '-1']['phase_e'] == 90) $em = 0;
                elseif ($p['phase'][$i . '-1']['phase_e'] == 180) $em *= 0.3;
            }
            if ($this->base_data['planets'][0]['in_house_id'] > 6)
            {
//                $bbb = ($es * 100 + $em * 40);
//                echo "{$i}+日月影响值:{($es * 100 + $em * 40)}=$bbb\n";
                $po[$i] += ($es * 100 + $em * 40);
            } else
            {
//                $bbb = ($es * 70 + $em * 70);
//                echo "{$i}+日月影响值:{($es * 70 + $em * 70)}=$bbb\n";
                $po[$i] += ($es * 70 + $em * 70);
            }
//            echo "\n\n\n";
            if ($ev && $ej && $em && $es) $po[$i] += 40;
            if (isset($p['ancient']['star']))
            {
                foreach ($p['ancient']['star'] as $star)
                {
                    if ($star['name'] == '轩辕十四' || $star['name'] == '角宿一')
                    {
                        $po[$i] += 30;
                    } elseif ($star['name'] == '大陵五')
                    {
                        $po[$i] -= 30;
                    }
                }
            }
            if (in_array($p['in_house_id'], [1, 5, 9, 10, 11])) $po[$i] += 30;
            if (in_array($p['in_house_id'], [8, 12])) $po[$i] -= 30;
            if ($p['in_house_id'] == 6) $po[$i] -= 15;
            $po[$i] = round($po[$i]);
            $po[$i] = $po[$i] > 500 ? 500 : ($po[$i] < 0 ? 0 : round($po[$i]));
        }
        return $po;
    }

    /**
     * 吉利是星体本身的吉凶，
     * 可给其它星体或宫位带来不同的作用。
     * 包括，先天值，主宰宫，昼夜吉凶
     */
    protected function getPlanetLuckyPower()
    {
        //  先天吉凶  木星 120 金星 110 月亮 65 太阳60 水星60 天王 25  火星15 海王 10 冥王 5 土星 5
        $pl = [60, 65, 60, 110, 15, 120, 5, 25, 10, 5];

        for ($i = 0; $i < 10; $i++)
        {
            //        一、	主宰宫
            //        5/9/10/11：+20
            //        1/4：+10
            //        7：+5
            //        8/12：-25
            //        6：-10
            if (
                $this->base_data['houses'][5]['protect_id'] == $i
                || $this->base_data['houses'][9]['protect_id'] == $i
                || $this->base_data['houses'][10]['protect_id'] == $i
                || $this->base_data['houses'][11]['protect_id'] == $i
            )
            {
                $pl[$i] += 20;
            }
            if (
                $this->base_data['houses'][1]['protect_id'] == $i
                || $this->base_data['houses'][4]['protect_id'] == $i
            )
            {
                $pl[$i] += 10;
            }
            if ($this->base_data['houses'][7]['protect_id'] == $i)
            {
                $pl[$i] += 5;
            }
            if (
                $this->base_data['houses'][8]['protect_id'] == $i
                || $this->base_data['houses'][12]['protect_id'] == $i
            )
            {
                $pl[$i] -= 25;
            }
            if ($this->base_data['houses'][6]['protect_id'] == $i)
            {
                $pl[$i] -= 10;
            }

            //        二、	昼夜
            //        日生盘，日木土+20,
            //        夜生盘，月金火+20
            //        得时，额外+10
            //        （水星东出以昼星计，西入以夜星计）
            if ($this->base_data['planets'][0]['in_house_id'] > 6)
            {
                if (in_array($i, [0, 5, 6]) || (
                        $i == 2
                        && $this->base_data['planets'][2]['ancient']['sun_in_out'] == '东出'
                    )) $pl[$i] += 20;
            } else
            {
                if (in_array($i, [1, 3, 4]) || (
                        $i == 2
                        && $this->base_data['planets'][2]['ancient']['sun_in_out'] == '西入'
                    )) $pl[$i] += 20;
            }
            if ($this->base_data['planets'][$i]['ancient']['hagy'] == '得时') $pl[$i] += 10;

            // 行星吉利值：增加
            // 1、星体互容金星或木星+15（本垣），
            $s1 = false;
            $venu_a = $this->base_data['planets'][3]['ancient']['or_walls_planet_id'];
            $jupi_a = $this->base_data['planets'][5]['ancient']['or_walls_planet_id'];
            $pl_i = $this->base_data['planets'][$i]['ancient']['or_walls_planet_id'];
            $venu = config('astrolog.protect_id')[$this->base_data['planets'][3]['in_sign_id'] - 1];// 计算现占守护星
            $jupi = config('astrolog.protect_id')[$this->base_data['planets'][5]['in_sign_id'] - 1];// 计算现占守护星
            if ($i != 3 && $venu_a == $i) if ($pl_i == 3) $s1 = true;
            if ($i > 6) if ($venu == $i) if ($pl_i == 3) $s1 = true;
            if ($i != 5 && $jupi_a == $i) if ($pl_i == 5) $s1 = true;
            if ($i > 6) if ($jupi == $i) if ($pl_i == 5) $s1 = true;
            if ($s1 === true) $pl[$i] += 15;

            //2、星体入庙或擢升或有本垣互容+20，
            $pl_i_m = config('astrolog.protect_id')[$this->base_data['planets'][$i]['in_sign_id'] - 1];// 计算现占守护星
            $pl_pli_a = $this->base_data['planets'][$pl_i]['ancient']['or_walls_planet_id'];
            $pl_pli_m = config('astrolog.protect_id')[$this->base_data['planets'][$pl_i]['in_sign_id'] - 1];// 计算现占守护星
            $pl_plim_m = config('astrolog.protect_id')[$this->base_data['planets'][$pl_i_m]['in_sign_id'] - 1];// 计算现占守护星
            $pl_plim_a = $this->base_data['planets'][$pl_i_m]['ancient']['or_walls_planet_id'];
            if ($this->base_data['planets'][$i]['ancient']['walls'] == 1
                || $this->base_data['planets'][$i]['ancient']['promote'] == 1
                || ($i != $pl_i && ($pl_pli_a == $i || $pl_pli_m == $i)) || ($i != $pl_i_m && ($pl_plim_m == $i || $pl_plim_a == $i))
            )
            {
                $pl[$i] += 20;
            }
            //3、土星与太阳存在接纳或互容，土星+15；火星与月亮存在接纳或互容，火星+15
            if ($i == 4 && $this->is_accept_each_other(4, 1))
            {
                $pl[$i] += 15;
            } elseif ($i == 6 && $this->is_accept_each_other(6, 0))
            {
                $pl[$i] += 15;
            }

            //        最终值=（x+45）/235*500
            $pl[$i] = round(($pl[$i] + 45) / 235 * 500);
            $pl[$i] = $pl[$i] > 500 ? 500 : ($pl[$i] < 0 ? 0 : $pl[$i]);
        }
        return $pl;
    }

    /**
     * 损伤值是表达星体所受的伤害多少，星体状态是否健康
     */
    protected function getPlanetBurnPower()
    {
        $in_sign = ['val' => [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, 11 => 0, 12 => 0,]];// 行星落座统计
        for ($i = 0; $i < 10; $i++)
        {
            $in_sign['val'][$this->base_data['planets'][$i]['in_sign_id']]++;
            $in_sign[$this->base_data['planets'][$i]['in_sign_id']][] = $i;
        }
        $x = [];
        for ($i = 0; $i < 10; $i++)
        {
            $x[$i] = [];
            $p = $this->base_data['planets'][$i];
            if (!empty($p['phase']))
            {
                foreach ($p['phase'] as $ph)
                {
                    if ($ph['id'] > 9) continue;
                    $phase_e = $ph['phase_e'];
                    $fierce = $this->getThePlanetFierce($this->base_data['planets'][$ph['id']], $phase_e);// 成相星的凶性基数
                    if ($this->debug) echo "{$i}的成相星{$ph['id']}凶性基数为：{$fierce}\n";
                    // 相位凶性
                    $px = 0;
                    if ($phase_e == 0) $px = 0.7;
                    elseif ($phase_e == 180) $px = 1;
                    elseif ($phase_e == 90) $px = 0.9;
                    elseif ($phase_e == 120 || $phase_e == 60) $px = 0.2;
                    if (isset($this->base_data['characteristic'][2]))
                    {
                        foreach ($this->base_data['characteristic'][2] as $chara)
                        {
                            // （本垣互容时各相位都以合论）
                            if ($chara['status'] == 2
                                && ($chara['id1'] == $i || $chara['id1'] == $ph['id'])
                                && ($chara['id2'] == $i || $chara['id2'] == $ph['id'])
                                && mb_substr($chara['ancient1'], 0, 2, 'utf-8') == '本垣'
                                && mb_substr($chara['ancient2'], 0, 2, 'utf-8') == '本垣')
                            {
                                $px = 0.7;
                            }
                        }
                    }


                    if (!isset($x[$i][$this->base_data['planets'][$ph['id']]['in_sign_id']]))
                        $x[$i][$this->base_data['planets'][$ph['id']]['in_sign_id']] = ['val' => 0, 'num' => 0];

                    $x[$i][$this->base_data['planets'][$ph['id']]['in_sign_id']]['val'] += $fierce * $px;
                    $x[$i][$this->base_data['planets'][$ph['id']]['in_sign_id']]['num']++;
                }
                if ($this->debug) echo "\n\n";
            }
        }
        $gx = [];
        foreach ($x as $i => $di)
        {
            $p = $this->base_data['planets'][$i];
            $gx[$i] = 0;
            foreach ($di as $j => $dj)
            {
                if ($dj['num'] > 1)
                {
                    if ($this->debug) echo "{$i}的成相星{$dj['num']}颗位于同一星座{$j}\n";
                    $dj['val'] *= (1 - $dj['num'] / 10);
                }
                $gx[$i] += $dj['val'];
                if ($this->debug) echo "{$i}成相星：令剩余的x以及合并后的同星座数据相加，得到结果gx={$gx[$i]}\n";
            }
            if (in_array($p['in_house_id'], [8, 12]))
            {
                $gx[$i] *= 1.3;
                if ($this->debug) echo "若该星{$i}在8/12宫，令gx=gx*1.3={$gx[$i]}\n";
            } elseif ($p['in_house_id'] == 6)
            {
                $gx[$i] *= 1.15;
                if ($this->debug) echo "若该星{$i}在6宫，令gx=gx*1.15={$gx[$i]}\n";
            }
            if ($p['ancient']['walls'] == 2 || $p['ancient']['promote'] == 2)
            {
                $gx[$i] *= 1.3;
                if ($this->debug) echo "若该星{$i}失势落陷，令gx=gx*1.3={$gx[$i]}\n";
            }
            if ($p['ancient']['walls'] == 1 || $p['ancient']['promote'] == 1)
            {
                $gx[$i] *= 0.85;
                if ($this->debug) echo "若该星{$i}入庙擢升，令gx=gx*0.85={$gx[$i]}\n";
            }
//            p($p['ancient']);
            if (isset($p['phase'][$i . '-' . $p['ancient']['or_promote_planet_id']]))
            {
                $gx[$i] *= 0.9;
                if ($this->debug) echo "若该星{$i}被擢升接纳，令gx=gx*0.9={$gx[$i]}\n";
            }
            if (isset($p['phase'][$i . '-' . $p['ancient']['or_walls_planet_id']]))
            {
                $is_walls_phase = false;
                if (isset($this->base_data['characteristic'][2]))
                {
                    foreach ($this->base_data['characteristic'][2] as $chara)
                    {
                        // （本垣互容时各相位都以合论）
                        if ($chara['status'] == 2
                            && ($chara['id1'] == $i || $chara['id1'] == $p['ancient']['or_walls_planet_id'])
                            && ($chara['id2'] == $i || $chara['id2'] == $p['ancient']['or_walls_planet_id'])
                            && mb_substr($chara['ancient1'], 0, 2, 'utf-8') == '本垣'
                            && mb_substr($chara['ancient2'], 0, 2, 'utf-8') == '本垣')
                        {
                            $is_walls_phase = true;
                        }
                    }
                }
                if (!$is_walls_phase)
                {
                    $gx[$i] *= 0.85;
                    if ($this->debug) echo "若该星{$i}被本垣接纳，令gx=gx*0.85={$gx[$i]}\n";
                }
            }
            if ($this->debug) echo "\n\n";
            $gx[$i] = round($gx[$i]) > 500 ? 500 : ($gx[$i] < 0 ? 0 : round($gx[$i]));
        }
        return $gx;
    }

    /**
     * 获取行星的凶性基数
     *
     */
    private function getThePlanetFierce($planet = [], $phase_e = null)
    {
        $base = [40, 45, 50, 25, 120, 25, 140, 80, 90, 90];// 星体的凶性基数
//        $fierce = 0;
        if (in_array($planet['id'], [0, 1, 2, 3, 5]) && !in_array($phase_e, [90, 180]))
        {
            $fierce = 0;
        } else
        {
            $fierce = $base[$planet['id']];
        }
//        if($this->debug) echo "{$planet['id']}凶性基数={$fierce}\n";
        //3、	失势落陷 +20
        if ($planet['ancient']['walls'] == 2 || $planet['ancient']['promote'] == 2)
        {
            $fierce += 20;
//            if($this->debug) echo "{$planet['id']}失势落陷：+20={$fierce}\n";
        }
        //4、	6宫+15,8宫+30,12宫+35，7宫+10（包括落入和主宰）
        if ($planet['in_house_id'] == 6 || $this->base_data['houses'][6]['protect_id'] == $planet['id']
            || $this->base_data['houses'][6]['protect_ancient_id'] == $planet['id'])
        {
            $fierce += 15;
//            if($this->debug) echo "{$planet['id']}落6宫或主宰6宫+15={$fierce}\n";
        }
        if ($planet['in_house_id'] == 8 || $this->base_data['houses'][8]['protect_id'] == $planet['id']
            || $this->base_data['houses'][8]['protect_ancient_id'] == $planet['id'])
        {
            $fierce += 30;
//            if($this->debug) echo "{$planet['id']}落8宫或主宰8宫+30={$fierce}\n";
        }
        if ($planet['in_house_id'] == 12 || $this->base_data['houses'][12]['protect_id'] == $planet['id']
            || $this->base_data['houses'][12]['protect_ancient_id'] == $planet['id'])
        {
            $fierce += 35;
//            if($this->debug) echo "{$planet['id']}落12宫或主宰12宫+35={$fierce}\n";
        }
        if ($planet['in_house_id'] == 7 || $this->base_data['houses'][7]['protect_id'] == $planet['id']
            || $this->base_data['houses'][7]['protect_ancient_id'] == $planet['id'])
        {
            $fierce += 10;
//            if($this->debug) echo "{$planet['id']}落7宫或主宰7宫+10={$fierce}\n";
        }
        //        5、	逆行+20
        if ($planet['speed'] < 0)
        {
            $fierce += 20;
//            if($this->debug) echo "{$planet['id']}逆行+20={$fierce}\n";
        }
        return $fierce;
    }

    /**
     * 检测星体与四轴相位
     * 容许度 日月8°  其他星体5°
     * @param array $planet
     * @return array
     */
    private function IsPlanetPseudaxis($planet = [], $ascDeg = null, $icDeg = null, $desDeg = null, $mcDeg = null, $orb = null)
    {
        if ($planet['id'] < 2) $orb = 8;
        elseif ($planet['id'] < 10) $orb = 5;
        if (empty($planet) || $ascDeg === null || $icDeg = null || $degDeg = null || $mcDeg = null || $orb === null)
            return [false, null, ''];

        $pDeg = $planet['deg'];
        $diffASC = abs($pDeg - $ascDeg);
        $diffIC = abs($pDeg - $icDeg);
        $diffDES = abs($pDeg - $desDeg);
        $diffMC = abs($pDeg - $mcDeg);
        $diffASC = ($diffASC > 180) ? 360 - $diffASC : $diffASC;
        $diffIC = ($diffIC > 180) ? 360 - $diffIC : $diffIC;
        $diffDES = ($diffDES > 180) ? 360 - $diffDES : $diffDES;
        $diffMC = ($diffMC > 180) ? 360 - $diffMC : $diffMC;
        // 合上升或中天
        if ($diffASC < $orb) return [true, 0, 'asc'];
        if ($diffMC < $orb) return [true, 0, 'mc'];
        // 合下降或天底
        if ($diffDES < $orb) return [true, 0, 'des'];
        if ($diffIC < $orb) return [true, 0, 'ic'];
        $orb = 7;
        // 拱上升或中天
        if (abs($diffASC - 120) < $orb) return [true, 120, 'asc'];
        if (abs($diffMC - 120) < $orb) return [true, 120, 'mc'];
        // 刑上升或中天
        if (abs($diffASC - 90) < $orb) return [true, 90, 'asc'];
        if (abs($diffMC - 90) < $orb) return [true, 90, 'mc'];
        // 拱下降或天底
        if (abs($diffDES - 120) < $orb) return [true, 120, 'des'];
        if (abs($diffIC - 120) < $orb) return [true, 120, 'ic'];
        return [false, null, ''];
    }

    /**
     * 星体、相位双重撞击判定、实际影响力
     * A、单相位判定：在一个相位里面，
     *    #A星的星体、星座、宫位中有属于分类标号为X的元素，而B星的星体、星座、宫位中也有属于分类标号为X的元素，
     *    #且两元素不是同一元素（如水星5宫摩羯六分月亮三宫天蝎，水、三宫都属于标号3，且不是同元素），这就称，该相位有基于主题X的双重撞击。
     *    #该相位对X主题事物形成了强调。
     * B、多相位判定：对于一颗星体
     *    #检查其多个相位以及本身星座、宫位所有元素之中（除星体自身外），各标号元素重复了多少次。
     *    #重复强调的元素其重要性增加，依照相位关联度来确定其重要性提升的程度。
     *    若某号元素中有星体出现，则先计算该星体与此星的相位关联度，是为基本关联度，其它同号元素（星座、宫位）则以相应的相位关联度的1/4（可调整）来计算，最后三者相加作为该星影响力
     *    若某号元素中无星体出现，则可认为其影响力为隐性未被激活的状态，未经星体表达，但其定位星对其拥有0.8的影响系数（只以现代守护体系计算，固定）
     * 对每颗星体，找出其所有关联星体及影响系数
     * @param array $planet 某星体数据
     * @param float $alike_sign 落座系数-可调整变量  0.25
     * @param float $alike_house 落宫系数-可调整变量  0.25
     * @param float $flu_house 落宫影响系数固定值 0.4
     * @param float $flu_sign 落座影响系数固定值 0.8
     * @return array 各元素对行星的影响
     */
    public function planet_influence($planet = [], $alike_sign = 0.25, $alike_house = 0.15, $flu_house = 0.4, $flu_sign = 0.8)
    {
        if (empty($planet)) return [];
        $flag = [1 => 4, 2 => 3, 3 => 2, 4 => 1, 5 => 0, 6 => 2, 7 => 3, 8 => 9, 9 => 5, 10 => 6, 11 => 7, 12 => 8];// 行星对应元素标号   星座和宫位都是1-12  一一对应
        $phase = $planet['phase'];
        $s = [];
        $s[$planet['in_sign_id']]['s'][] = $planet['id'];
        $in_house = $this->planet_gg($planet['id']);
        if (count($in_house) == 2)
        {
            $s[$in_house[0]]['h'][] = $planet['id'];
            $s[$in_house[1]]['h'][] = $planet['id'];
        } else
        {
            $s[$planet['in_house_id']]['h'][] = $planet['id'];
        }
        $sc = [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, 11 => 0, 12 => 0];
        // 检查各元素重复次数
        if (!empty($phase))
        {
            foreach ($phase as $ph)
            {
                if ($ph['id'] < 10)
                {
                    $planet_ph = $this->base_data['planets'][$ph['id']];
                    for ($i = 1; $i < 13; $i++)
                    {
                        if ($flag[$i] == $ph['id']) $s[$i]['p'][] = $planet_ph['id'];
                    }
                    $s[$planet_ph['in_sign_id']]['s'][] = $planet_ph['id'];
                    $in_housei = $this->planet_gg($planet_ph['id']);
                    if (count($in_housei) == 2)
                    {
                        $s[$in_housei[0]]['h'][] = $planet_ph['id'];
                        $s[$in_housei[1]]['h'][] = $planet_ph['id'];
                    } else
                    {
                        $s[$planet_ph['in_house_id']]['h'][] = $planet_ph['id'];
                    }
                }
            }

            foreach ($s as $i => $d)
            {
                if (isset($d['s']))
                {
                    foreach ($d['s'] as $dd)
                    {
                        if ($dd == $planet['id']) $sc[$i] += $flu_sign;
                        elseif ($dd != $flag[$i]) $sc[$i] += $this->planet_xg(0, $phase[$planet['id'] . '-' . $dd]) * $alike_sign;
                        else $sc[$i] += $this->planet_xg(0, $phase[$planet['id'] . '-' . $dd]);
                    }
                }
                if (isset($d['h']) && (isset($d['s']) || isset($d['p'])))
                {
                    foreach ($d['h'] as $dd)
                    {
                        if ($dd == $planet['id']) $sc[$i] += $flu_house;
                        elseif ($dd != $flag[$i]) $sc[$i] += $this->planet_xg(0, $phase[$planet['id'] . '-' . $dd]) * $alike_house;
                        else $sc[$i] += $this->planet_xg(0, $phase[$planet['id'] . '-' . $dd]);
                    }
                }
                if (isset($d['p']))
                {
                    $sc[$i] += $this->planet_xg(0, $phase[$planet['id'] . '-' . $d['p'][0]]);
                }
            }
        }
        return array_filter($sc);
    }

    /**
     * 星体归宫判定（归宫）gg
     * 在六分仪宫位制下（非等宫和整宫制），一颗星若位于X宫，且位于X+1宫的宫头前面5度之内，则将其归属于X+1宫（其既是X宫又是X+1宫星体）；
     * 若本宫头与下一宫宫头位于同一星座（即X宫被劫夺），则将5度缩小为3度。
     * @param null $pid
     * @return array 归属宫位 0=> 当前所落宫位   1=>(若存在则表示当前星体归属于两个宫内)
     */
    private function planet_gg($pid = null)
    {
        $hid = $this->base_data['planets'][$pid]['in_house_id'];
        $ret = [$hid];
        if ($pid === null) return [];
        if (abs($this->base_data['houses'][3]['deg'] - $this->base_data['houses'][2]['deg']) != 30
            && abs($this->base_data['houses'][3]['deg'] - $this->base_data['houses'][1]['deg']) != 60)
        {


            $n_hid = ($hid == 12) ? 1 : $hid + 1;
            $diff_deg = ($this->base_data['houses'][$hid]['in_sign_id'] == $this->base_data['houses'][$n_hid]['in_sign_id']) ? 3 : 5;
            $p_deg = $this->base_data['planets'][$pid]['deg'];
            $h_deg = $this->base_data['houses'][$n_hid]['deg'];
            $diff = abs($h_deg - $p_deg);
            $diff = $diff > 180 ? 360 - $diff : $diff;
            if ($diff <= $diff_deg) $ret[] = $n_hid;
        }
        return $ret;
    }

    /**
     * 相位关联度判定（相-关）xg
     * 对于任一相位，判断构成相位的两星之间的关联紧密程度。
     * A 按不同相位类型，赋予不同关联基数：合1，冲0.7，刑，0.6，拱0.6，六分0.55；
     * B 容许1度内关联100%，1-3度0.9,3-5度0.8，5-7度0.7,7度外0.6（称之为容许系数）
     * @param null $pid 行星id
     * @param array $phase 该星某相位数据 phase_e=>相位度数 phase_orb=>相位容许度 id=>产生相位的行星id
     * @return float or null   相位关联度
     */
    private function planet_xg($pid = null, $phase = [])
    {
        $base = null;
        if ($pid === null || empty($phase)) return $base;
        switch ($phase['phase_e'])
        {
            case 0:
                $base = 1;
                break;
            case 60:
                $base = 0.55;
                break;
            case 90:
                $base = 0.6;
                break;
            case 120:
                $base = 0.6;
                break;
            case 180:
                $base = 0.7;
                break;
        }
        $coef = null;
        if ($phase['phase_orb'] <= 1) $coef = 1;
        elseif ($phase['phase_orb'] <= 3) $coef = 0.9;
        elseif ($phase['phase_orb'] <= 5) $coef = 0.8;
        elseif ($phase['phase_orb'] <= 7) $coef = 0.7;
        elseif ($phase['phase_orb'] > 7) $coef = 0.6;
        if ($base !== null && $coef !== null) return $base * $coef;
        return null;
    }

    /**
     * 星体实际关联度判定（实关）sg（暂时取消）
     * A 两星之间存在互容关系，
     *      本垣-本垣互容sg=xg*2，
     *      本垣-擢升互容sg=xg*1.8，
     *      擢升-擢升互容sg=xg*1.5；
     *   若两星无相位，且存在本垣-本垣互容，则sg=0.5（所有互容判定均包含三王星）
     * B 两星无互容但有接纳，则sg=xg*1.5
     * C 星体无互容接纳sg=xg
     * @param null $pid1
     * @param null $pid2
     * @return array
     */
    private function planet_sg($pid1 = null, $pid2 = null)
    {
        if ($pid1 === null || $pid2 === null) return [];
    }

    /**
     * 相位冲突判定（xc）
     * 对于刑冲相位，xc=xg
     * 对于火土天海冥的合相位，xc=xg*0.5
     * @param int $pid 行星id
     * @param array $phase 该星某相位数据
     * @return float
     */
    private function planet_xc($pid = null, $phase = [])
    {
        $ret = null;
        if ($pid === null || empty($phase)) return $ret;
        if ($phase['phase_e'] == 90 || $phase['phase_e'] == 180)
        {
            $ret = $this->planet_xg($pid, $phase);
        } elseif ($phase['phase_e'] == 0)
        {
            if (!in_array($pid, [3, 6, 7, 8, 9]) || !in_array($phase['id'], [3, 6, 7, 8, 9]))
            {
                $cofe = $this->planet_xg($pid, $phase);
                $ret = $cofe * 0.5;
            }
        }
        return $ret;
    }

    /**
     * #############导星判定###############
     * 对于一颗星，对它影响力最大的行星称之为导星。
     * 若某星只有一个相位，则该相位星为导星
     * 若某星有多个相位，则选择对它影响系数最高的行星为导星
     * @param null $pid
     * @return array
     */
    private function planet_max($pid = null)
    {
        if ($pid === null) return null;
        return null;
    }

    /**
     * 夹宫夹星计算
     * @param array $data
     * @return array
     */
    protected function between_house_planet($data = [])
    {
        // 12星座行星数量
        $star = [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, 11 => 0, 12 => 0];
        $p_sign = [];
        $sign_house = [];
        $ret = [];
        for ($k = 0; $k < 10; $k++)
        {
            $star[$data['planets'][$k]['in_sign_id']]++;
            $p_sign[$data['planets'][$k]['in_sign_id']][] = $k;
        }
        for ($h = 1; $h < 13; $h++)
        {
            $sign_house[$data['houses'][$h]['in_sign_id']][] = $h;
        }
        for ($si = 1; $si < 13; $si++)
        {
            $pre = $si == 1 ? 12 : $si - 1;

            if (!isset($sign_house[$si]) && isset($sign_house[$pre])) $sign_house[$si] = $sign_house[$pre];

        }
        // 定义同性质行星数组 总共6组
        // 46火土、35金木、01日月、789天海冥
        $similaritys = [[4, 6], [3, 5], [0, 1], [7, 8], [7, 9], [8, 9]];

        foreach ($similaritys as $s)
        {
            $a = $data['planets'][$s[0]];
            $b = $data['planets'][$s[1]];
            $min = $a['deg'] > $b['deg'] ? $b['deg'] : $a['deg'];
            $max = $a['deg'] > $b['deg'] ? $a['deg'] : $b['deg'];
            $sign_diff = abs($a['in_sign_id'] - $b['in_sign_id']);
            // 同星座夹星数量
            $num = 0;
            for ($l = 0; $l < 10; $l++)
            {
                $deg = $data['planets'][$l]['deg'];
                if (!in_array($l, $s) && $deg > $min && $deg < $max && $sign_diff == 0)
                {
                    $ps = $l;
                    $num++;
                }
            }
            // 计算夹宫
            if (($sign_diff == 2 || $sign_diff == 10) && $star[$a['in_sign_id']] == 1 && $star[$b['in_sign_id']] == 1)
            {
                $max_sign = $a['in_sign_id'] > $b['in_sign_id'] ? $a['in_sign_id'] : $b['in_sign_id'];
                // 计算中间星座ID
                if ($max_sign == 12 && $sign_diff == 10) $mid_sign = 1;
                elseif ($max_sign == 11 && $sign_diff == 10) $mid_sign = 12;
                else $mid_sign = $max_sign - 1;

                // 夹宫
                $ret[] = [
                    'id1' => $s[0],
                    'id2' => $s[1],
                    'status' => 1,// 1=>夹宫 2=>夹星
                    'between' => $mid_sign,// 所夹星座
                    'obj' => @$sign_house[$mid_sign],// 夹宫可能有多个或0个  存在有两宫头落同一星座
                ];

                // 夹宫夹星 三颗星连续三个星座
                // 判断是否：夹宫夹星
                if ($star[$mid_sign] == 1)
                {
                    for ($p = 0; $p < 7; $p++)
                    {
                        if ($data['planets'][$p]['in_sign_id'])
                        {
                            // 显示夹星
                            $ret[] = [
                                'id1' => $s[0],
                                'id2' => $s[1],
                                'status' => 2,// 1=>夹宫 2=>夹星
                                'obj' => $p_sign[$mid_sign],// 夹星
                            ];
                        }
                    }
                }
            }
            // 同星座夹星
            if ($num == 1)
            {
                // 显示夹星
                $ret[] = [
                    'id1' => $s[0],
                    'id2' => $s[1],
                    'status' => 2,// 1=>夹宫 2=>夹星
                    'obj' => [$ps],// 夹星
                ];
            }
        }
        return $ret;
    }

    private function is_zhigao($id)
    {
        $mc_deg = $this->base_data['planets'][MC]['deg'];
        $min_diff = 360;
        $min_diff_id = null;
        foreach ($this->base_data['planets'] as $i => $planet)
        {
            $deg = $planet['deg'];
            $diff = abs($deg - $mc_deg);
            if ($diff > 180) $diff = 360 - $diff;
            if ($diff < $min_diff && $diff != 0 && $i < 10)
            {
                $min_diff_id = $i;
                $min_diff = $diff;
            }
        }
        if ($id == $min_diff_id) return true;
        return false;
    }

    /**
     * 检查两颗星是否互容接纳
     * @param null $pid1
     * @param null $pid2
     * @return bool
     */
    private function is_accept_each_other($pid1 = null, $pid2 = null)
    {
        if ($pid1 === null || $pid2 === null) return false;
        $p1 = $this->base_data['planets'][$pid1];
        $p2 = $this->base_data['planets'][$pid2];
        // 本源接纳 或 擢升接纳
        if (isset($p1['phase'][$pid1 . '-' . $pid2]))
        {
            if ($pid1 != $pid2 && ($pid1 == $p2['ancient']['or_walls_planet_id']
                    || $pid1 == config('astrolog.protect_id')[$p2['in_sign_id'] - 1]))
            {
                return true;
            }
            if ($pid1 != $pid2 && $pid1 == $p2['ancient']['or_promote_planet_id'])
            {
                return true;
            }
        }
        // 互容双方  当前行星
        if ($pid1 != $pid2 &&
            (
                $p2['ancient']['or_walls_planet_id'] == $pid1
                || config('astrolog.protect_id')[$p2['in_sign_id'] - 1] == $pid1
                || $p2['ancient']['or_promote_planet_id'] == $pid1
            )
            && (
                $p1['ancient']['or_walls_planet_id'] == $pid2
                || config('astrolog.protect_id')[$p1['in_sign_id'] - 1] == $pid2
                || $p1['ancient']['or_promote_planet_id'] == $pid2
            )
        )
        {
            return true;
        }
        return false;
    }
}
